package course.p4_list.s3_BetterTwoNextList;

import lombok.Data;

/**
 * 这是对普通双向链表的一种存储优化，从原来的两个引用表示上，下节点变为用一个节点表示
 * 公式：
 * ptrdiff = 下一个节点的引用 异或 上一个节点的引用
 * 通过这个公式我们可以计算出上一个节点和下一个节点，这样每个节点就可以减少一个存储节点引用的空间
 * 那么如何计算呢？
 * 比如下面的链表： A<-->B<-->C<-->D-->NULL
 *
 *  其中：
 *  A的ptrdiff指针为： NULL^B
 *  B的ptrdiff指针为: A^C
 *  C的ptrdiff指针为：B^D
 *  D的ptrdiff指针为: C^NULL
 *
 * 那么如何进行链表的遍历呢？
 * 我们可以这样做：
 * public void printList(Node head) {
 *    Node pre = NULL;
 *    Node cur = head;
 *    while(cur!=NULL) {
 *       System.out.println(cur.data)
 *       Node tem = cur;
 *       cur = pre^cur.pstdiff;
 *       pre = tem;
 *   }
 * }
 *
 *
 */
@Data
public class Node {

    //存储数据的变量
    private int data;
    //它存储了上，下一个节点对象索引计算变量
    private Node ptrdiff;
    //节点名称
    private String nodeName;

    /**
     * 节点构造方法，仅构造出其存储的数据，并不构造下一节点的引用
     * @param data 节点数据
     */
    public Node(int data, String nodeName) {
        this.data = data;
        if(nodeName==null) {
            nodeName = "" + data;
        }
        this.nodeName = nodeName;
    }


}
